/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package es.fpsampayo.recursos;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;

/**
 *
 * @author fran
 */
public abstract class OperacionesDB {
    
    
    
    
    
    
    public static ComboBoxModel consultaConcelloComboBox (){
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        ResultSet rs = null;
        
        String sql = "select DISTINCT concello FROM public.bien_inmueble union select DISTINCT concello FROM cat.finca ORDER BY concello";
        String valor = null;
        Conexion conexion = new Conexion();
        rs = conexion.Select(sql);
        try {
            while (rs.next()){
                valor = rs.getString(1);
                model.addElement(valor);
            }
        } catch (SQLException ex) {
            Logger.getLogger(OperacionesDB.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            conexion.Desconectar();
        }
        
        return model;
    }
    
    public static ComboBoxModel consultaCampoComboBox (String BaseDatos){
        String tabla = null;
        if("Cat".equals(BaseDatos)){
            tabla = "cat.finca";
        }else if ( "Padron".equals(BaseDatos)){
            tabla = "public.bien_inmueble";
        }
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        ResultSet rs = null;
        ResultSetMetaData metadata = null;
        
        String sql = "SELECT * FROM " + tabla +" WHERE concello = ''";
        Conexion conexion = new Conexion();
        rs = conexion.Select(sql);
        try {
            metadata = rs.getMetaData();
            int ncol = metadata.getColumnCount();
            for ( int i = 0; i < ncol ; i++)
                model.addElement(metadata.getColumnLabel(i+1));
            
        } catch (SQLException ex) {
            Logger.getLogger(OperacionesDB.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return model;
    }
    
        public static int getIdPadron(String campo, Object valorcampo){

            int id = 0;
            String sql = "SELECT id FROM bien_inmueble WHERE " + campo + " = \'" + valorcampo + "\';";
            Conexion conexion = new Conexion();
            ResultSet rs = conexion.Select(sql);
            try {
                rs.next();
                id = Integer.parseInt(rs.getObject("id").toString());
            } catch (SQLException ex) {
                Logger.getLogger(OperacionesDB.class.getName()).log(Level.SEVERE, null, ex);
            }
            return id;
    }
        
        public static int getIdCat(String campo, Object valorcampo){

            int id = 0;
            String sql = "SELECT id_parcela FROM cat.finca WHERE " + campo + " = \'" + valorcampo + "\';";
            System.out.println(sql);
            Conexion conexion = new Conexion();
            ResultSet rs = conexion.Select(sql);
            try {
                rs.next();
                id = Integer.parseInt(rs.getObject("id_parcela").toString());
            } catch (SQLException ex) {
                Logger.getLogger(OperacionesDB.class.getName()).log(Level.SEVERE, null, ex);
            }
            return id;
    }
        
        public static int devolverIdMax(){
            int id = 0;
            Conexion conexion = new Conexion();
            ResultSet rs = conexion.Select("SELECT max(id_parcela) AS id_parcela FROM cat.finca");
        try {
            rs.next();
            id = rs.getInt("id_parcela");
        } catch (SQLException ex) {
            Logger.getLogger(OperacionesDB.class.getName()).log(Level.SEVERE, null, ex);
        }finally{
            conexion.Desconectar();
        }
            return id;
        }
        
        public static void relacionarTablas (String concello){
            
            //Este método funciona bien con ficheros pequeños. Pero probando con el de VIGO URBANA (750M) se vuelve extremadamente lento.
            //De todas formas, se deja así de momento, con vistas a buscar mejor solución.
            
            int id = 0;
            String rcat = null;
            int count = 0;
            
            Conexion conexion = new Conexion();
            ResultSet rs = conexion.Select("SELECT id_parcela, referencia_catastral FROM cat.finca WHERE concello = '" + concello + "'");
            System.out.println("SELECT id_parcela, referencia_catastral FROM cat.finca WHERE concello = '" + concello + "'");
            try {
                Conexion conexion1 = new Conexion();
                while (rs.next()){
                    id = rs.getInt("id_parcela");
                    rcat = rs.getString("referencia_catastral");
                    conexion1.insertarPorLotes("UPDATE cat.construccion SET id_parcela = " + id + " WHERE referencia_catastral = '" + rcat + "'");
                    conexion1.insertarPorLotes("UPDATE cat.unidad_construcctiva SET id_parcela = " + id + " WHERE referencia_catastral = '" + rcat + "'");
                    
                    count++;
                    
                    if (count == 100){
                        conexion1.ejecutarLote();
                        conexion1.limpiarLote();
                        count = 0;
                    }
                }
                conexion1.ejecutarLote();
                conexion1.Desconectar();
            } catch (SQLException ex) {
                Logger.getLogger(OperacionesDB.class.getName()).log(Level.SEVERE, null, ex);
            }
            conexion.Desconectar();
        }
}
